Cover TOC Chap Prev Chap Prev Fig Next Fig Next Chap

Chapter 31: Creating New Node Types

../ch31/31fig06.gif
Figure 31.6

A donut node type.

31fig06.wrl
Click on the image to view the VRML scene.

#VRML V2.0 utf8
# The VRML 2.0 Sourcebook
# Copyright (c) 1997
# Andrea L. Ames, David R. Nadeau, and John L. Moreland
PROTO Donut [
    field    SFFloat crossSectionRadius     1.0
    field    SFFloat spineRadius            2.0
    field    SFInt32 crossSectionResolution 16
    field    SFInt32 spineResolution        16
    eventIn  SFFloat set_crossSectionRadius
    eventIn  SFFloat set_spineRadius
    eventOut MFVec2f crossSection_changed
    eventOut MFVec3f spine_changed
] {
    DEF Ext Extrusion {
        spine        [ ]
        crossSection [ ]
        creaseAngle  1.57
        beginCap     FALSE
        endCap       FALSE
    }
    DEF DonutMaker Script {
        url "donutmkr.js"
        field    SFFloat crossSectionRadius     IS crossSectionRadius
        field    SFFloat spineRadius            IS spineRadius
        field    SFInt32 crossSectionResolution IS crossSectionResolution
        field    SFInt32 spineResolution        IS spineResolution
        eventIn  SFFloat set_crossSectionRadius IS set_crossSectionRadius
        eventIn  SFFloat set_spineRadius        IS set_spineRadius
        eventOut MFVec2f crossSection_changed   IS crossSection_changed
        eventOut MFVec3f spine_changed          IS spine_changed
    }
    ROUTE DonutMaker.crossSection_changed TO Ext.set_crossSection
    ROUTE DonutMaker.spine_changed        TO Ext.set_spine
}